﻿using System;
using System.Data;
using System.Linq;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using Emporium_Web.Controls;
using Emporium_Web.Enums;
using Emporium_Web.DBML;
using System.Linq.Expressions;

namespace Emporium_Web
{
    public partial class RutaProduccionList : System.Web.UI.Page
    {
        private int IdSeleccionado
        {
            get { return (int)ViewState["IdSeleccionado"]; } 
            set { }
        }

        /// <summary>
        /// Es el código de estilo
        /// </summary>
        private int EstiloId
        {
            get { return ViewState["RequestCodeEstilo"] == null ? -1 : (int)ViewState["RequestCodeEstilo"]; }
            set { ViewState["RequestCodeEstilo"] = value; }
        }

        /// <summary>
        /// Es el código de ruta
        /// </summary>
        private int RutaId
        {
            get { return ViewState["RequestCodeRuta"] == null ? -1 : (int)ViewState["RequestCodeRuta"]; }
            set { ViewState["RequestCodeRuta"] = value; }
        }

        /// <summary>
        /// Nro de registros
        /// </summary>
        private int TotalRegistros
        {
            get { return ViewState["TotalRegistros"] == null ? -1 : (int)ViewState["TotalRegistros"]; }
            set { ViewState["TotalRegistros"] = value; }
        }

        protected void Page_Init(object sender, EventArgs e)
        {
            EstiloAdd.agregarClick += new EventHandler(EstiloAdd_Seleccionado);
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            warningMessage.Visible = false;
            errorMessage.Visible = false;

            if (!IsPostBack)
            {
                Master.ActualizaMenu(MenuPrincipal.Desarrollo, (int)MenuDesarrollo.RutaProduccion);
                Master.AgregarBreadcrumb("Ruta de Producción", "#", true);
                Master.AgregarBreadcrumb("Listado", "#", false);
             
                lblMensajeGridFooter.Text = String.Format(Resources.MensajesValidacion.GridFooterMessage, 0);

                this.EstiloId = 0;
                ListarRutas();
            }
            if (TotalRegistros == 0) gvRutaProduccion.Rows[0].Cells.Clear();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.EstiloId <= 0)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Realice la búsqueda de algún Estilo.";
                    return;
                }   
                ListarRutas();                        
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }
      
        private void ListarRutas()
        {
            TablasDataContext database = new TablasDataContext();

            var listaRutas = (from rutas in database.DE_RutaProduccion
                              where (rutas.Estilo_Id == this.EstiloId)
                              orderby rutas.Ruta_Orden ascending 
                              select rutas);

            //Se establece el estilo.     
            var estilo = database.DE_Estilo.FirstOrDefault(c => c.Id == this.EstiloId);

            if (estilo != null)
            {
                if (listaRutas.Count() == 0) estilo.EstadoRuta = null;
                if (listaRutas.Count() > 0 && estilo.EstadoRuta == null) estilo.EstadoRuta = 'P';
                database.SubmitChanges();

                if (estilo.EstadoRuta == null)
                {
                    btnModificaEstado.Text = "SIN ESTADO";
                    EstablecerEstadoControles(true);
                }
                if (estilo.EstadoRuta == 'P')
                {
                    btnModificaEstado.Text = "PENDIENTE";
                    EstablecerEstadoControles(true);
                    gvRutaProduccion.Columns[1].Visible = true;
                    gvRutaProduccion.Columns[2].Visible = true;
                    gvRutaProduccion.Columns[9].Visible = true;
                    gvRutaProduccion.Columns[10].Visible = true;
                }
                if (estilo.EstadoRuta == 'F')
                {
                    btnModificaEstado.Text = "FINALIZADO";
                    EstablecerEstadoControles(false);
                    gvRutaProduccion.Columns[1].Visible = false;
                    gvRutaProduccion.Columns[2].Visible = false;
                    gvRutaProduccion.Columns[9].Visible = false;
                    gvRutaProduccion.Columns[10].Visible = false;
                }
            }
            gvRutaProduccion.DataSource = listaRutas;
            gvRutaProduccion.DataBind();

            TotalRegistros = listaRutas.Count();

            if (TotalRegistros > 0)
            {
                gvRutaProduccion.UseAccessibleHeader = false;
                gvRutaProduccion.HeaderRow.TableSection = TableRowSection.TableHeader;
                warningMessage.Visible = false;
            }
            else
            {
                gvRutaProduccion.DataSource = new List<DE_RutaProduccion>() { new DE_RutaProduccion() };
                gvRutaProduccion.DataBind();

                gvRutaProduccion.Rows[0].Cells.Clear();
            }

            lblMensajeGridFooter.Text = String.Format(Resources.MensajesValidacion.GridFooterMessage, TotalRegistros);
        }

        protected void EstiloSearch_Seleccionado(object sender, EventArgs e)
        {
            this.EstiloId = 0;
            ListarRutas();
            OrdenProduccionSearch.CodigoSeleccionado = 0;
            OrdenProduccionSearch.DescripcionSeleccionado = string.Empty;
            this.EstiloId = EstiloSearch1.CodigoSeleccionado;            
        }

        protected void OrdenProduccionSearch_Seleccionado(object sender, EventArgs e)
        {
            this.EstiloId = 0;
            ListarRutas();
            TablasDataContext database = new TablasDataContext();
            var op = database.PR_OrdenProduccion.FirstOrDefault(c => c.OrdPro_Id == OrdenProduccionSearch.CodigoSeleccionado);
            var estilo = database.DE_Estilo.FirstOrDefault(c => c.Id == op.Estilo_Id);

            EstiloSearch1.CodigoSeleccionado = estilo.Id;
            EstiloSearch1.DescripcionSeleccionado = estilo.Descripcion;
            this.EstiloId = estilo.Id;
        }

        protected void ProcesoAdd_Seleccionado(object sender, EventArgs e)
        {
            if (gvRutaProduccion.EditIndex < 0)
            {
                GridViewRow row = gvRutaProduccion.FooterRow;
                TextBox txtProcesoNew = ((TextBox)row.FindControl("txtProcesoNew"));
                Label lblProcesoIdNew = (Label)gvRutaProduccion.FooterRow.FindControl("lblProcesoIdNew");

                txtProcesoNew.Text = ProcesoAdd.DescripcionSeleccionado;
                lblProcesoIdNew.Text = ProcesoAdd.CodigoSeleccionado.ToString();
                ActividadAdd.ProcesoId = ProcesoAdd.CodigoSeleccionado;               
            }
            else
            {              
                GridViewRow row = gvRutaProduccion.Rows[gvRutaProduccion.EditIndex];
                TextBox txtProcesoEdit = ((TextBox)row.FindControl("txtProceso"));
                Label lblProcesoIdEdit = (Label)row.FindControl("lblProcesoIdEdit");

                txtProcesoEdit.Text = ProcesoAdd.DescripcionSeleccionado;
                lblProcesoIdEdit.Text = ProcesoAdd.CodigoSeleccionado.ToString();
                ActividadAdd.ProcesoId = ProcesoAdd.CodigoSeleccionado;               
            }
        }

        protected void ActividadAdd_Seleccionado(object sender, EventArgs e)
        {
            if (gvRutaProduccion.EditIndex < 0)
            {
                GridViewRow row = gvRutaProduccion.FooterRow;
                TextBox txtActividadNew = ((TextBox)row.FindControl("txtActividadNew"));
                Label lblActividadIdNew = (Label)gvRutaProduccion.FooterRow.FindControl("lblActividadIdNew");

                txtActividadNew.Text = ActividadAdd.DescripcionSeleccionado;
                lblActividadIdNew.Text = ActividadAdd.CodigoSeleccionado.ToString();                
            }
            else
            {                
                GridViewRow row = gvRutaProduccion.Rows[gvRutaProduccion.EditIndex];
                TextBox txtActividadEdit = ((TextBox)row.FindControl("txtActividad"));
                Label lblActividadIdEdit = (Label)row.FindControl("lblActividadIdEdit");

                txtActividadEdit.Text = ActividadAdd.DescripcionSeleccionado;
                lblActividadIdEdit.Text = ActividadAdd.CodigoSeleccionado.ToString();
            }
        }

        protected void ProveedorAdd_Seleccionado(object sender, EventArgs e)
        {
            if (gvRutaProduccion.EditIndex < 0)
            {
                GridViewRow row = gvRutaProduccion.FooterRow;
                TextBox txtProveedorNew = ((TextBox)row.FindControl("txtProveedorNew"));
                Label lblProveedorIdNew = (Label)gvRutaProduccion.FooterRow.FindControl("lblProveedorIdNew");

                txtProveedorNew.Text = ProveedorAdd.DescripcionSeleccionado;
                lblProveedorIdNew.Text = ProveedorAdd.CodigoSeleccionado.ToString();                
            }
            else
            {
                GridViewRow row = gvRutaProduccion.Rows[gvRutaProduccion.EditIndex];
                TextBox txtProveedorEdit = ((TextBox)row.FindControl("txtProveedor"));
                Label lblProveedorIdEdit = (Label)row.FindControl("lblProveedorIdEdit");

                txtProveedorEdit.Text = ProveedorAdd.DescripcionSeleccionado;
                lblProveedorIdEdit.Text = ProveedorAdd.CodigoSeleccionado.ToString();
            }
        }

        protected void EstiloAdd_Seleccionado(object sender, EventArgs e)
        {
            txtCodigoEstilo.Text = EstiloAdd.CodigoSeleccionado.ToString();
        }        

        protected void gvRutaProduccion_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {

            }
        }

        protected void gvRutaProduccion_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gvRutaProduccion.EditIndex = -1;
            ListarRutas();
        }

        protected void gvRutaProduccion_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName.Equals("Insert"))
                {
                    if (EstiloSearch1.CodigoSeleccionado <= 0)
                    {
                        warningMessage.Visible = true;
                        lblWarningMessage.Text = "Realice la búsqueda de algún Estilo.";
                        return;
                    }

                    Label lblProcesoIdNew = (Label)gvRutaProduccion.FooterRow.FindControl("lblProcesoIdNew");
                    Label lblActividadIdNew = (Label)gvRutaProduccion.FooterRow.FindControl("lblActividadIdNew");
                    Label lblProveedorIdNew = (Label)gvRutaProduccion.FooterRow.FindControl("lblProveedorIdNew");
                    TextBox txtProveedorNew = ((TextBox)gvRutaProduccion.FooterRow.FindControl("txtProveedorNew"));                    

                    int? codigoProveedor = null;
                    if (lblProveedorIdNew.Text != string.Empty && txtProveedorNew.Text != string.Empty)
                        codigoProveedor = Convert.ToInt32(lblProveedorIdNew.Text);

                    TablasDataContext database = new TablasDataContext();
                    var listaRutas = (from rutas in database.DE_RutaProduccion
                                      where (rutas.Estilo_Id == this.EstiloId)                                      
                                      select rutas);                    

                    var maxOrden = listaRutas.Max(c => c.Ruta_Orden);
                    if (maxOrden == null) maxOrden = 0;

                    DE_RutaProduccion ruta = new DE_RutaProduccion()
                    {
                        Proceso_Id = Convert.ToInt32(lblProcesoIdNew.Text),
                        Actividad_Id = Convert.ToInt32(lblActividadIdNew.Text),
                        Proveedor_Id = codigoProveedor,
                        Ruta_Orden = maxOrden + 1,
                        Estilo_Id = this.EstiloId
                    };
                    database.DE_RutaProduccion.InsertOnSubmit(ruta);
                    database.SubmitChanges();
                    ListarRutas();
                }

                if (e.CommandName.Equals("ProcesoAdd") || e.CommandName.Equals("ProcesoEdit"))
                {
                    ProcesoAdd.ListarProcesos();                    
                }

                if (e.CommandName.Equals("ActividadAdd") || e.CommandName.Equals("ActividadEdit"))
                {
                    ActividadAdd.ListarActividades();                    
                }

                if (e.CommandName.Equals("ProveedorAdd") || e.CommandName.Equals("ProveedorEdit"))
                {
                    ProveedorAdd.ListarProveedores();                    
                }

                if (e.CommandName.Equals("Arriba"))
                {
                    TablasDataContext database = new TablasDataContext();
                    var listaRutas = (from rutas in database.DE_RutaProduccion
                                      where (rutas.Estilo_Id == this.EstiloId)
                                      orderby rutas.Ruta_Orden ascending 
                                      select rutas);
                    
                    var rutaSeleccionada = listaRutas.FirstOrDefault(c => c.Ruta_Id == Convert.ToInt32(e.CommandArgument));
                    var indice = listaRutas.ToList().IndexOf(rutaSeleccionada);
                    if (indice > 0)
                    {
                        if (listaRutas.ToList()[indice].Ruta_Orden > listaRutas.ToList()[indice - 1].Ruta_Orden)
                        {
                            listaRutas.ToList()[indice].Ruta_Orden = listaRutas.ToList()[indice].Ruta_Orden - 1;
                            listaRutas.ToList()[indice - 1].Ruta_Orden = listaRutas.ToList()[indice].Ruta_Orden + 1;
                        }
                    }
                    database.SubmitChanges();
                    ListarRutas();
                }

                if (e.CommandName.Equals("Abajo"))
                {
                    TablasDataContext database = new TablasDataContext();
                    var listaRutas = (from rutas in database.DE_RutaProduccion
                                      where (rutas.Estilo_Id == this.EstiloId)
                                      orderby rutas.Ruta_Orden ascending
                                      select rutas);

                    var rutaSeleccionada = listaRutas.FirstOrDefault(c => c.Ruta_Id == Convert.ToInt32(e.CommandArgument));
                    var indice = listaRutas.ToList().IndexOf(rutaSeleccionada);
                    if (indice < listaRutas.ToList().Count)
                    {
                        if (indice == 0 || (indice > 0 && indice < listaRutas.ToList().Count &&
                            listaRutas.ToList()[indice + 1].Ruta_Orden > listaRutas.ToList()[indice].Ruta_Orden))
                        {
                            listaRutas.ToList()[indice].Ruta_Orden = listaRutas.ToList()[indice].Ruta_Orden + 1;
                            listaRutas.ToList()[indice + 1].Ruta_Orden = listaRutas.ToList()[indice].Ruta_Orden - 1;
                        }
                    }
                    database.SubmitChanges();
                    ListarRutas();
                }
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        protected void gvRutaProduccion_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                int rutaId = Convert.ToInt32(e.Keys["Ruta_Id"]);
                TablasDataContext database = new TablasDataContext();

                var listaRutas = (from rutas in database.DE_RutaProduccion
                                  where (rutas.Estilo_Id == this.EstiloId)
                                  orderby rutas.Ruta_Orden ascending
                                  select rutas);

                var rutaActual = database.DE_RutaProduccion.FirstOrDefault(c => c.Ruta_Id == rutaId);
                var indiceEliminar = listaRutas.ToList().IndexOf(rutaActual);
                if (rutaActual != null)
                    database.DE_RutaProduccion.DeleteOnSubmit(rutaActual);

                database.SubmitChanges();
                ReordenarRutas();
                ListarRutas();
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        protected void gvRutaProduccion_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gvRutaProduccion.EditIndex = e.NewEditIndex;
            ListarRutas();
        }

        protected void gvRutaProduccion_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                int rutaId = Convert.ToInt32(e.Keys["Ruta_Id"]);

                Label lblProcesoIdEdit = (Label)gvRutaProduccion.Rows[e.RowIndex].FindControl("lblProcesoIdEdit");
                Label lblActividadIdEdit = (Label)gvRutaProduccion.Rows[e.RowIndex].FindControl("lblActividadIdEdit");
                Label lblProveedorIdEdit = (Label)gvRutaProduccion.Rows[e.RowIndex].FindControl("lblProveedorIdEdit");
                TextBox txtProveedor = ((TextBox)gvRutaProduccion.Rows[e.RowIndex].FindControl("txtProveedor"));

                int? codigoProveedor = null;
                if (lblProveedorIdEdit.Text != string.Empty && txtProveedor.Text != string.Empty)
                    codigoProveedor = Convert.ToInt32(lblProveedorIdEdit.Text);

                TablasDataContext database = new TablasDataContext();
                var rutaActual = database.DE_RutaProduccion.FirstOrDefault(c => c.Ruta_Id == rutaId);

                if (rutaActual != null)
                {
                    rutaActual.Proceso_Id = Convert.ToInt32(lblProcesoIdEdit.Text);
                    rutaActual.Proveedor_Id = codigoProveedor;
                    rutaActual.Actividad_Id = Convert.ToInt32(lblActividadIdEdit.Text);
                }
                database.SubmitChanges();

                gvRutaProduccion.EditIndex = -1;
                ListarRutas();
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        protected void btnBuscarEstiloCopiar_Click(object sender, EventArgs e)
        {
            EstiloAdd.ListarEstilos();
        }   

        protected void btnCopiar_Click(object sender, EventArgs e)
        {
            try
            {
                TablasDataContext database = new TablasDataContext();

                if (EstiloSearch1.CodigoSeleccionado <=0)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Realice la búsqueda de algun Estilo.";
                    return;
                }

                if (txtCodigoEstilo.Text == string.Empty)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Ingrese Código de Estilo a copiar";
                    return;
                }

                int codigoEstilo = 0;
                if (!Int32.TryParse(txtCodigoEstilo.Text, out codigoEstilo))
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Ingrese Código Valido de Estilo a copiar";
                    return;
                }

                var rutasActuales = (from rutas in database.DE_RutaProduccion
                                   where (rutas.Estilo_Id == this.EstiloId)
                                   orderby rutas.Ruta_Orden ascending
                                   select rutas);

                if (EstiloSearch1.CodigoSeleccionado == codigoEstilo)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Los estilos deben ser diferentes.";
                    return;
                }

                if (rutasActuales.Count() > 0)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Estilo ingresado ya contiene Rutas registradas.";
                    return;
                }

                var estiloOrigen = database.DE_Estilo.FirstOrDefault(c => c.Id == codigoEstilo);
                if (estiloOrigen == null)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Código de Estilo a copiar no existe";
                    return;
                }

                var rutasOrigen = (from rutas in database.DE_RutaProduccion
                                   where (rutas.Estilo_Id == codigoEstilo)
                                   orderby rutas.Ruta_Orden ascending
                                   select rutas);

                if (rutasOrigen.ToList().Count == 0)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Código de Estilo a copiar no tiene Rutas registradas";
                    return;
                }

                //Se realiza el copiado.

                foreach (var item in rutasOrigen.ToList())
                {
                    database.DE_RutaProduccion.InsertOnSubmit(new DE_RutaProduccion()
                    {
                        Actividad_Id = item.Actividad_Id,
                        Estilo_Id = this.EstiloId,
                        Proceso_Id = item.Proceso_Id,
                        Proveedor_Id = item.Proveedor_Id,
                        Ruta_Orden = item.Ruta_Orden,
                        Ruta_Proximo = item.Ruta_Proximo,
                        Ruta_SubOrden = item.Ruta_SubOrden
                    });
                }
                database.SubmitChanges();
                ListarRutas();
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        protected void gvRutaProduccion_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.RutaId = (int)gvRutaProduccion.DataKeys[gvRutaProduccion.SelectedIndex]["Ruta_Id"];
            ListarRutas();
            ActualizarSeleccionGrilla(gvRutaProduccion);
        }  

        private void ActualizarSeleccionGrilla(GridView gv)
        {
            if (gv.SelectedIndex > -1)
                foreach (GridViewRow row in gv.Rows)
                {
                    if (row.Cells[0].Controls.Count > 0)
                    {
                        ImageButton img = (ImageButton)row.Cells[0].Controls[0];
                        if ((row.RowIndex == gv.SelectedIndex))
                        {
                            img.ImageUrl = @"~/images/selected.png";
                        }
                        else
                        {
                            img.ImageUrl = @"~/images/unselected.png";
                        }
                    }
                }
        }

        protected void btnAsignar_Click(object sender, EventArgs e)
        {
            try
            {                
                if (this.EstiloId <= 0)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = Resources.MensajesValidacion.NoItemSelected;
                    return;
                }

                if (txtValorAsignar.Text == string.Empty)
                {
                    warningMessage.Visible = true;
                    lblWarningMessage.Text = "Ingrese un valor a Asignar";
                    return;
                }

                TablasDataContext database = new TablasDataContext();

                var iValorAsignar = Convert.ToInt32(txtValorAsignar.Text);

                var rutasActuales = (from rutas in database.DE_RutaProduccion
                                  where (rutas.Estilo_Id == this.EstiloId)
                                  orderby rutas.Ruta_Orden ascending
                                  select rutas);

                var listRutas = rutasActuales.ToList();

                var iMinOrden = listRutas.Min(c => c.Ruta_Orden);
                var iMaxOrden = listRutas.Max(c => c.Ruta_Orden);
                
                var iItems = listRutas.Count;
                var iRango = iMaxOrden - iMinOrden + 1;

                if (ddlAsignacion.SelectedValue == "0")
                {
                    if (iValorAsignar < iMinOrden)
                    {
                        warningMessage.Visible = true;
                        lblWarningMessage.Text = "Ingrese valor mayor a: " + iMinOrden.ToString();
                        return;
                    }

                    if (iRango == iItems && iValorAsignar > iMaxOrden)
                    {
                        warningMessage.Visible = true;
                        lblWarningMessage.Text = "Ingrese valor menor o igual a: " + iMaxOrden.ToString();
                        return;
                    }

                    if (iRango < iItems && iValorAsignar > iItems)
                    {
                        warningMessage.Visible = true;
                        lblWarningMessage.Text = "Ingrese valor menor o igual a: " + iItems.ToString();
                        return;
                    }

                    var rutaSeleccionada = listRutas.Find(c => c.Ruta_Id == this.RutaId);
                    rutaSeleccionada.Ruta_Orden = iValorAsignar;
                    database.SubmitChanges();
                    ReordenarRutas();
                    ListarRutas();
                }

                if (ddlAsignacion.SelectedValue == "1")
                {   
                    var rutaSeleccionada = listRutas.Find(c => c.Ruta_Id == this.RutaId);
                    rutaSeleccionada.Ruta_SubOrden = iValorAsignar;
                    database.SubmitChanges();
                    ListarRutas();
                }

                if (ddlAsignacion.SelectedValue == "2")
                {
                    var rutaSeleccionada = listRutas.Find(c => c.Ruta_Id == this.RutaId);                    
                    rutaSeleccionada.Ruta_Proximo = iValorAsignar;                  

                    database.SubmitChanges();
                    ListarRutas();
                }
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        private void ReordenarRutas()
        {
            TablasDataContext database = new TablasDataContext();
            var rutasActualesOrder = (from rutas in database.DE_RutaProduccion
                                      where (rutas.Estilo_Id == this.EstiloId)
                                      orderby rutas.Ruta_Orden ascending
                                      select rutas);

            var listRutasOrder = rutasActualesOrder.ToList();

            for (int i = 0; i < listRutasOrder.Count; i++)
            {
                if (i == 0 && listRutasOrder[i].Ruta_Orden > 1)
                {
                    listRutasOrder[i].Ruta_Orden = 1;
                }
                if (i > 0 && listRutasOrder[i].Ruta_Orden - listRutasOrder[i - 1].Ruta_Orden > 1)
                {
                    listRutasOrder[i].Ruta_Orden = listRutasOrder[i - 1].Ruta_Orden + 1;
                }
            }
            database.SubmitChanges();
        }

        protected void btnModificaEstado_Click(object sender, EventArgs e)
        {
            try
            {
                if (btnModificaEstado.Text.ToUpper() == "PENDIENTE")
                {
                    if (TotalRegistros == 0)
                    {
                        warningMessage.Visible = true;
                        lblWarningMessage.Text = "Ingrese al menos una Ruta";
                        return;
                    }

                    EstablecerEstadoControles(false);
                    //Se establece el estilo.     
                    TablasDataContext database = new TablasDataContext();
                    var estilo = database.DE_Estilo.FirstOrDefault(c => c.Id == this.EstiloId);

                    if (estilo != null)
                    {
                        estilo.EstadoRuta = 'F';
                        btnModificaEstado.Text = "FINALIZADO";
                    }
                    database.SubmitChanges();
                }
                else
                    if (btnModificaEstado.Text.ToUpper() == "FINALIZADO")
                    {
                        EstablecerEstadoControles(true);
                        //Se establece el estilo.     
                        TablasDataContext database = new TablasDataContext();
                        var estilo = database.DE_Estilo.FirstOrDefault(c => c.Id == this.EstiloId);

                        if (estilo != null)
                        {
                            estilo.EstadoRuta = 'P';
                            btnModificaEstado.Text = "PENDIENTE";
                        }
                        database.SubmitChanges();
                    }

                ListarRutas();
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        private void EstablecerEstadoControles(bool bValor)
        {
            btnAsignar.Enabled = bValor;
            btnBuscarEstiloCopiar.Enabled = bValor;
            btnCopiar.Enabled = bValor;

            txtCodigoEstilo.Enabled = bValor;
            txtValorAsignar.Enabled = bValor;
            ddlAsignacion.Enabled = bValor;
        }
    }
}